clear; clc; close all;

% 设置参数 
uvals = [4, 6, 9];

% 迭代相关参数
x0 = 0.5;       % 初始值
N  = 100;        % 迭代次数

figure('Position',[100,100,1000,300]); 

for idx = 1:3
    % 当前子图对应的 u
    u = uvals(idx);
    
    % 调用 enhanced 函数，生成 N+1 个迭代值
    [xdata, ~] = enhanced(u, x0, N+1);
    
    % 为绘制映射函数曲线，定义匿名函数用于连续采样
    f_plot = @(x) u .* sin(x) .* (1 - sin(x));
    
    % 生成用于绘制函数曲线和对角线的横坐标
    switch idx
        case 1
            xPlot = linspace(0, 1.5, 400);
        case 2
            xPlot = linspace(0, 2, 400);
        case 3
            xPlot = linspace(0, 3, 400);
    end
    
    % 创建子图
    subplot(1,3,idx);
    hold on; box on; grid on;
    
    % 1) 绘制映射函数曲线： y = f(x)
    plot(xPlot, f_plot(xPlot), 'r', 'LineWidth', 1.5);
    
    % 2) 绘制对角线： y = x
    plot(xPlot, xPlot, '--k', 'LineWidth', 1.0);
    
    % 3) 绘制迭代过程：利用 enhanced 函数计算的迭代值 xdata
    cmap = lines(N);  % 为每个迭代步骤分配不同颜色
    for i = 1:N
        % 水平线：从 (x_i, x_{i+1}) 到 (x_{i+1}, x_{i+1})
        plot([xdata(i), xdata(i+1)], [xdata(i+1), xdata(i+1)], ...
             'Color', cmap(i,:), 'LineWidth', 1.2);
        % 垂直线：如果 i < N，则从 (x_{i+1}, x_{i+1}) 到 (x_{i+1}, xdata(i+2))
        if i < N
            plot([xdata(i+1), xdata(i+1)], [xdata(i+1), xdata(i+2)], ...
                 'Color', cmap(i,:), 'LineWidth', 1.2);
        end
    end
    
    % 设置坐标轴标签和子图标题
    xlabel('x(n)');
    ylabel('x(n+1)');
    switch idx
        case 1
            title('u = 4, period');
            xlim([0, 1.5]); ylim([0, 1.5]);
        case 2
            title('u = 6, chaos');
            xlim([0, 2]);   ylim([0, 2]);
        case 3
            title('u = 9, chaos');
            xlim([0, 3]);   ylim([0, 3]);
    end
    
    hold off;
end

% 添加整体标题
sgtitle('Cobweb 图');
